#ifndef METACLASSE_H
#define METACLASSE_H 1

#include "Classe.h"

#include "Parser.h"

/**
 * Cette classe permet d'initialiser simplement une Classe à partir du
 * nom de celle-ci. On charge toutes les informations utiles depuis le
 * fichier Joueur0/Donnees/ListeClasse.xml.
 *
 * A la différence de MetaRace, il n'est pas possible d'utiliser
 * construitClasse sur une instance de MetaClasse, car certaines
 * méthodes sont propres à un type de Classe. Il faut obligatoirement
 * créer un objet du bon type avant de faire quoi que ce soit.
 *
 * @author Johan "Solo" Luisier
 */
class MetaClasse : public Classe
{
 public:
  MetaClasse(const std::string& nomClasse);
  ~MetaClasse();

  StatusCode lireFichier();

  void calculNiveau();
  unsigned calculeTAc0() const;
  void calculNivMag();
  void js(unsigned*) const;
  void prixAcces(std::map< std::string, unsigned >*& Map) const;

  Classe* creerObjet();

 protected:
  /**
   * Emplacement du fichier contentant les informations sur les classes.
   */
  static const std::string fichierSource;

  /**
   * Parseur qui lit le fichier XML pour construire les attibuts de la
   * classe.
   */
  Parser Lecture;

  //StatusCode lireAdmises(const ElementDOM* elDom);

  StatusCode lirePrerequis(const ElementDOM* elDom);

  StatusCode lireComp(const ElementDOM* elDom, std::vector< CompetenceClasse >& vec);

  StatusCode lireEnsemble(const ElementDOM* elDom);

  unsigned aSpecialisation() const;
};

#endif // METACLASSE_H
